package com.uade.services;

import javax.ejb.Stateless;
import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.naming.NamingException;

import org.apache.log4j.Logger;

import com.uade.model.Configuracion;
import com.uade.model.Evento;
import com.uade.model.Respuesta;
import com.uade.model.exceptions.BusinessException;
import com.uade.model.exceptions.LogisticaMonitoreoException;
import com.uade.model.exceptions.NotFoundException;
import com.uade.webservices.logisticaMonitoreo.LogCreator;

@WebService(name = "ServidorEstadoEntregaBean", 
serviceName = "ServidorEstadoEntregaBeanService", 
targetNamespace = "http://portalEstadoEntrega/", 
portName = "ServidorEstadoEntregaBeanPort")
@Stateless
public class ServidorEstadoEntregaBeanService implements
		ServidorEstadoEntregaBeanServiceInt {

	private Logger log = Logger
			.getLogger(ServidorEstadoEntregaBeanService.class);

	@WebMethod
	public String notificarEntregaDespacho(int xml) {
		Respuesta resp = new Respuesta();
		try {
			log.info("Ingresa a notificarEntregaDespacho");

			log.info("Se parseo correctamente el XML");
			ServiceLocator.getRemoteFacadeB().recepcionEntrega("ENTREGADA",
					Integer.valueOf(xml));
			log.info("Se actualizo la compra correctamente");

			// Notifica a Log y monitoreo
			Evento evento = new Evento();
			evento.setAccion(" Actualizar Compra Id: " + xml
					+ " Estado: ENTREGADA Portal G4");
			log.info("Se envia la notificacion a logistica y monitoreo ");
			enviarLog(evento.getXml());
			// Se arma el string de respuesta
			resp.setEstado("OK");
			resp.setMensaje("La compra fue actualizada, y notificada a logistica y monitoreo - Portal G4");

		} catch (NamingException e) {
			resp.setEstado("ERROR");
			resp.setMensaje("No pudo realizarse la operacion - Portal G4 ");
		} catch (NotFoundException e) {
			resp.setEstado("ERROR");
			resp.setMensaje("No pudo realizarse la operacion " + e.getMessage()
					+ " Portal G4 ");
		} catch (BusinessException e) {
			resp.setEstado("OK");
			resp.setMensaje("Se realizo la operacion de actualizacion, no pudo enviarse el log a logistica y monitoreo - Portal G4 ");
		} catch (LogisticaMonitoreoException e) {
			resp.setEstado("OK");
			resp.setMensaje("Se realizo la operacion de actualizacion, no pudo enviarse el log a logistica y monitoreo - Portal G4 ");
		} finally {
			log.info("Respuesta:  " + resp.toString());

		}
		return resp.toXmlString();
	}

	/**
	 * Obtiene la lista de configuraciones envia los logs a auditoria y
	 * monitoreo
	 * 
	 * @param compra
	 * @throws BusinessException
	 * @throws LogisticaMonitoreoException
	 * @throws NamingException
	 */
	private void enviarLog(String xml) throws BusinessException,
			LogisticaMonitoreoException, NamingException {

		// Obtiene la configuracion
		Configuracion conFiguracion = ServiceLocator.getRemoteFacadeB()
				.obtenerConfiguracionLMLog();

		if (conFiguracion != null) {

			LogCreator logCreator = new LogCreator();
			logCreator.generarLog(xml, conFiguracion);
		} else {
			log.warn("No existe configuracion para realizar el log de la venta");
		}

	}

}
